Multi-component application programs, such as a tabbed web browser, are popular with users because they are a convenient way to interact with multiple resources (e.g., documents, web pages, files, etc.) at the same time through a single application. Traditionally, applications that make use of multi-components employ a shared input message queue to handle message processing and sequencing for the multiple components. Unfortunately, under the traditional approach, if one component becomes unresponsive, the component stops processing its messages from the shared queue. This can cause a disruption of messages for the other components that share the same message queue. Thus, one unresponsive component can effectively block the queue and cause the other components to become unresponsive as well.